<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Promise面试题</title>
</head>

<body>
    <script src="jquery.js" ></script>
    <script>
        // es6中new Promise() 作用把异步操作改成同步执行

        // 1. Promise的基本用法
        // let p = new Promise((resolve, reject) => {
        //     // resolve("成功了")
        //     reject("失败")
        // })
        // console.log(p)

        // p.then((res) => {       // 成功走 .then
        //     console.log("成功走then,啦啦啦", res)
        // }).catch((res) => {     // 失败走 .catch
        //     console.log("失败走catch,嘤嘤嘤", res)
        // }).finally(() => {      // 不管失败成功都会走finally
        //     console.log("都要走finally")
        // })
        function getAjax(url12) {
            return new Promise(function (resolve, reject) {
                $.ajax({
                    url: url12,
                    success: function (res) {
                        resolve(res) //成功回调
                    },
                    error: function (err) {
                        reject(err) //失败回调
                    }
                })
            })
        }

        // var p2 = getAjax('data/1.json')
        // p2.then((res) => {
        //     console.log(83, res)
        // }).catch((err) => {
        //     console.log(err)
        // })



        // Promise.all()方法 有一个失败，都会失败
        // Promise.all([
        //     //可以把promise封装下getAjax()方法
        //      getAjax('data/json.txt'),
        //      getAjax('data/ar2r.txt'),
        // ]).then(
        //     function (res) {
        //         console.log('返回合并后的数组', res);
        //     },
        //     function (err) {
        //         console.log('有一个失败全失败', err)
        //     }
        // )

        //  Promise.race() 执行一次 谁快执行谁
        Promise.race([
            //可以把promise封装下getAjax()方法        
            getAjax('data/2.json'),    // {b: 5}
            getAjax('data/1.json'),  //{a:7}
       
           
        ]).then(
            function (res) {
                console.log('快的', res);
            }
        )



        /*
                总结:   promise 是用来解决地狱回调的问题 用链式进行回调
                        promise 里一共有3种状态 分别是:   pending 初始状态 进行中 
                                                        fulfilled 成功状态，请求成功了 
                                                        rejected 失败状态，
                        请求失败了Promise的状态一旦改变，就不会再变，任何时候都可以得到这个结果，状态不可以逆，
                        只能由 pending变成fulfilled或者由pending变成rejected。
                        promise有哪些API方法：.then()  成功之后的回调
                                            .catch()    失败之后的回调
                                            .finally()  无论成功还是失败都会走的回调
                                            promise.all()  有一个失败，都会失败 请求多个数据接口时使用
                                            promise.race()  谁快就调用谁
        应用场景：封装ajax,axios的get,post封装，微信小程序中封装wx.request()，uniapp开发中uni.request()
        */



    </script>
</body>

</html>